const express = require('express');
const router = express.Router();
const Grade = require('../models/Grade');
const { setCache, getCache, deleteCache } = require('../config/redis');

// 获取所有成绩
router.get('/', async (req, res) => {
  try {
    const { studentId } = req.query;
    const cacheKey = `grades:${studentId || 'all'}`;
    
    // 尝试从缓存获取数据
    const cachedData = await getCache(cacheKey);
    if (cachedData) {
      return res.json(cachedData);
    }

    // 如果缓存中没有，从数据库获取
    const query = studentId ? { studentId } : {};
    const grades = await Grade.find(query);
    
    // 将数据存入缓存，设置1小时过期
    await setCache(cacheKey, grades, 3600);
    
    res.json(grades);
  } catch (error) {
    console.error('获取成绩失败:', error);
    res.status(500).json({ message: '获取成绩失败' });
  }
});

// 获取单个成绩
router.get('/:id', async (req, res) => {
  try {
    const cacheKey = `grade:${req.params.id}`;
    
    // 尝试从缓存获取数据
    const cachedData = await getCache(cacheKey);
    if (cachedData) {
      return res.json(cachedData);
    }

    // 如果缓存中没有，从数据库获取
    const grade = await Grade.findById(req.params.id);
    if (!grade) {
      return res.status(404).json({ message: '成绩不存在' });
    }

    // 将数据存入缓存，设置1小时过期
    await setCache(cacheKey, grade, 3600);
    
    res.json(grade);
  } catch (error) {
    console.error('获取成绩失败:', error);
    res.status(500).json({ message: '获取成绩失败' });
  }
});

// 创建新成绩
router.post('/', async (req, res) => {
  try {
    const grade = new Grade(req.body);
    await grade.save();
    
    // 清除相关缓存
    await deleteCache(`grades:${grade.studentId}`);
    await deleteCache('grades:all');
    
    res.status(201).json(grade);
  } catch (error) {
    console.error('创建成绩失败:', error);
    res.status(500).json({ message: '创建成绩失败' });
  }
});

// 更新成绩
router.patch('/:id', async (req, res) => {
  try {
    const grade = await Grade.findByIdAndUpdate(
      req.params.id,
      req.body,
      { new: true }
    );
    
    if (!grade) {
      return res.status(404).json({ message: '成绩不存在' });
    }

    // 清除相关缓存
    await deleteCache(`grade:${req.params.id}`);
    await deleteCache(`grades:${grade.studentId}`);
    await deleteCache('grades:all');
    
    res.json(grade);
  } catch (error) {
    console.error('更新成绩失败:', error);
    res.status(500).json({ message: '更新成绩失败' });
  }
});

// 删除成绩
router.delete('/:id', async (req, res) => {
  try {
    const grade = await Grade.findById(req.params.id);
    if (!grade) {
      return res.status(404).json({ message: '成绩不存在' });
    }

    await Grade.findByIdAndDelete(req.params.id);

    // 清除相关缓存
    await deleteCache(`grade:${req.params.id}`);
    await deleteCache(`grades:${grade.studentId}`);
    await deleteCache('grades:all');
    
    res.json({ message: '成绩删除成功' });
  } catch (error) {
    console.error('删除成绩失败:', error);
    res.status(500).json({ message: '删除成绩失败' });
  }
});

module.exports = router; 